package cn.edu.ctgu.junitTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Properties;

public class Configuration {
	private Properties props = new Properties();

    /**
    * 读取属性配置文件
    * 
    * @param confFile
    */
    public void fromFile(File confFile) {
        try(FileInputStream in = new FileInputStream(confFile);){
            props.load(new InputStreamReader(in,StandardCharsets.UTF_8));
        } catch (IOException e) {
        throw new ValueParseException("配置文件解析错误");
        } 
    }

    /**
    * 获取键值
    * 
    * @param key
    * @return value
    */
    public String getProp(String key) {
        return props.getProperty(key);
    }

    /**
    * 获取布尔类型键值
    * 
    * @param key
    * @return value
    */
    public boolean getBoolean(String key) {
        String value = props.getProperty(key);
        if ("true".equalsIgnoreCase(value)) {
            return true;
        }
        if ("false".equalsIgnoreCase(value)) {
            return false;
        }
        throw new ValueParseException("键值不存在");
    }

    /**
	   *实现public Boolean getBooleanWithDefault(String key, Boolean defaultValue)方法，
	   *返回指定键的布尔值；如果值不存在，则返回传入的缺省值，并添加测试用例测试之 
	   */
	public Boolean getBooleanWithDefault(String key, Boolean defaultValue){
      String value= props.getProperty(key);
      
      if(value != null){
      	
          Boolean Value1 = Boolean.parseBoolean(value);
          
          return Value1;
      }
      return defaultValue;
  }
	
	/**
	 * 
	 * 实现public Integer getIntWithDefault(String key, int defaultValue)方法，返回指定键的整数值；
	 * 如果键值不存在，则返回缺省值，并添加测试用例测试之；
	 */
  public Integer getIntWithDefault(String key, int defaultValue){
  	
  	String value=props.getProperty(key);
  	
  	if(value!=null && !value.isEmpty()){
  		
  		Integer newValue = Integer.parseInt(value);
  		
  		return newValue;
  	}
  	return defaultValue;
  }
  
  
 /**
  * 
  * 实现public Date getDateWithDefault(String key, Date defaultValue)方法，
  * 返回指定键的日期值；如果键值不存在，则返回缺省值，并添加测试用例测试之；
  * 
  */
	@SuppressWarnings("deprecation")
	public Date getDateWithDefault(String key, Date defaultValue){
  	
      String value = props.getProperty(key);
      
      if(value!=null && !value.isEmpty()){
      	
          return new Date(value);
          
      }
      return defaultValue;
  }
}
